﻿using sipfe.Controllers.Base;
using sipfe.model.dataAccess;
using sipfe.service.mante;
using sipfe.util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace sipfe.Controllers.Mante
{
    public class DependenciaManteController : BaseSipfeController
    {
        string Titulo = "MANTENIMIENTO DE LAS DEPENDENCIAS DEL SISTEMA";

        public ActionResult DependenciaCab()
        {
            CompendioManteService compendioManteService = new CompendioManteService();
            ViewBag.TITULO = Titulo;
            ViewBag.DepTipoRegion = formaSelectTipoDep(Constante.getInstance().N_IDE_TIPO_DEP);
            //CacheCompendio.getInstance().Dispose();

            return View();
        }

        public ViewResult DependenciaDet(string sw,string vDescripcion,string  nIdeDep)
        {
            DependenciaManteService dependenciaManteService = new DependenciaManteService();
            IList<dynamic> lista = dependenciaManteService.listaDependenciaDet(sw, vDescripcion.ToUpper(), nIdeDep);
            int NumTotalRegistros = lista.Count();

            if (NumTotalRegistros > 0)
            {                
                return View(lista);
            }
            else
            {
                return View("SinRegistros");
            }
           
        }
        public ViewResult ListarDepenPoRegion(decimal IdRegion, string funcion, string tipo)
        {
            //findAreaById  unitario 
            DependenciaManteService dependenciaManteService = new DependenciaManteService();
            ViewBag.ARBOL = new HtmlString(string.Format(dependenciaManteService.getDependenciasByRegion(IdRegion, funcion, tipo)));
            return View();
        }

        public ViewResult DetalleDependenciaById(decimal nIdeDep)
        {
            DependenciaManteService dependenciaManteService = new DependenciaManteService();            
            return View(dependenciaManteService.sipMaeDependenciaByIdService(nIdeDep));
        }

        public ViewResult AgregarRegionInp()
        {
            return View();
        }
        [HttpPost]
        public ActionResult AgregarRegionInp(SIPMaeDependencia sipMaeDependencia)
        {
            if (ModelState.IsValid)
            {
                DependenciaManteService dependenciaManteService = new DependenciaManteService();
                String[] rpta = dependenciaManteService.AgregarTablaInpService(sipMaeDependencia);
                CacheCompendio.getInstance().Dispose();
                return RedirectToAction("RptaAddTabla", new { idTabla = rpta[0], nomTabla = rpta[1] });
            }
            return View(sipMaeDependencia);
        }

        public ViewResult RptaAddTabla(string idTabla, string nomTabla)
        {
            ViewBag.ID_TABLA = idTabla;
            ViewBag.NOM_TABLA = nomTabla;
            return View();
        }

        public ViewResult UpdateDependencia(decimal nIdeDep)
        {
            DependenciaManteService dependenciaManteService = new DependenciaManteService();
            ViewBag.DepTipoRegion = formaSelectTipoDep(Constante.getInstance().N_IDE_TIPO_DEP);
            return View(dependenciaManteService.sipMaeDependenciaByIdService(nIdeDep));
        }

        [HttpPost]
        public ActionResult UpdateDependencia(SIPMaeDependencia sipMaeDependencia)
        {
            if (ModelState.IsValid)
            {
                string idTD = Request["idTD"];
                DependenciaManteService dependenciaManteService = new DependenciaManteService();
                String[] rpta = dependenciaManteService.updateDependenciaService(sipMaeDependencia);
                return RedirectToAction("RptaAddTabla", new { idTabla = rpta[0], nomTabla = rpta[1] });
            }
            else
            {
                ViewBag.DepTipoRegion = formaSelectTipoDep(Constante.getInstance().N_IDE_TIPO_DEP);
            }
            return View(sipMaeDependencia);
        }
                
        public ViewResult ListarCodigoDepHijos(decimal nIdeDepPadre)
        {
            DependenciaManteService dependenciaManteService = new DependenciaManteService();
            IList<dynamic> lista = dependenciaManteService.ListarCodigoDepHijosService(nIdeDepPadre);
            int NumTotalRegistros = lista.Count();

            if (NumTotalRegistros > 0)
            {                
                return View(lista);
            }
            else
            {
                return View("SinRegistros");
            }           
        }

        public ViewResult AddHijoAlaDependencia(decimal nIdeDep, decimal nIdeDepRegion)
        {
            DependenciaManteService dependenciaManteService = new DependenciaManteService();
            ViewBag.DepTipoRegion = formaSelectTipoDep(Constante.getInstance().N_IDE_TIPO_DEP);
            ViewBag.DepPapa     =   nIdeDep;
            ViewBag.DepRegion   =   nIdeDepRegion;
           // return View(dependenciaManteService.sipMaeDependenciaByIdService(nIdeDep));
            return View();
        }

        [HttpPost]
        public ActionResult AddHijoAlaDependencia(SIPMaeDependencia sipMaeDependencia)
        {
            if (ModelState.IsValid)
            {
                string idTD = Request["idTD"];
                DependenciaManteService dependenciaManteService = new DependenciaManteService();
                String[] rpta = dependenciaManteService.addHijoAlaDependenciaService(sipMaeDependencia);
                return RedirectToAction("RptaAddTabla", new { idTabla = rpta[0], nomTabla = rpta[1] });
            }
            else
            {
                ViewBag.DepTipoRegion = formaSelectTipoDep(Constante.getInstance().N_IDE_TIPO_DEP);
            }
            return View(sipMaeDependencia);
        }

        public HtmlString CerrarVigenciaDep(decimal nIdeDep)
        {
            DependenciaManteService dependenciaManteService = new DependenciaManteService();
            DateTime ayer = UtilitariosUtil.FechaAyer();
            int rpta = dependenciaManteService.cerrarVigenciaDepService(nIdeDep, ayer);
            return new HtmlString((rpta == 1) ? ayer.ToString("dd/MM/yyyy") : "");
        }

        public void CleaCaheTipoRegion()
        {
            CacheCompendio.getInstance().Dispose();
        }
        


    }
}
